package utils;

import java.util.Collection;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 校验参数工具类
 */
public class CheckArgsUtils {
    /**
     * 获取字符串长度
     *
     * @param charSequence CharSequence是 Java 中的一个接口，用于表示字符序列。
     *                     它定义了一系列方法来操作和访问字符序列中的字符
     *                     <p>
     *                     在很多 Java 方法中，接受CharSequence作为参数可以增加方法的灵活性。
     *                     这样，方法可以接受不同类型的字符序列实现，
     *                     如String、StringBuilder或StringBuffer，而无需关心具体的实现类型。
     *                     <p>
     *                     既可以传入普通的字符串，也可以传入动态构建的字符串。
     */
    public static int getStrLength(CharSequence charSequence) {
        return charSequence == null ? 0 : charSequence.length();
    }


    /**
     * 判断一个对象是否为空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }


    /**
     * 判断一个对象是否不为空
     */
    public static boolean isNotNull(Object object) {
        return object != null;
    }


    /**
     * 判断一个字符串是否为空/全是空格
     */
    public static boolean isBlankString(CharSequence charSequence) {
        int strLength = getStrLength(charSequence);

        if (strLength == 0) return true;

        for (int i = 0; i < strLength; i++) {
            if (!Character.isWhitespace(charSequence.charAt(i))) {
                return false;
            }
        }
        return true;
    }


    /**
     * 判断一个字符串是否不为空/不全是空格
     */
    public static boolean isNotBlankString(CharSequence charSequence) {
        return !isBlankString(charSequence);
    }


    /**
     * 判断一个字符串是否为空/空字符串
     */
    public static boolean isEmptyString(CharSequence charSequence) {
        return charSequence == null || charSequence.length() == 0;
    }


    /**
     * 判断一个字符串是否不为空/空字符串
     */
    public static boolean isNotEmptyString(CharSequence charSequence) {
        return !isEmptyString(charSequence);
    }


    /**
     * 判断一个字符串是否符合传入的正则表达式
     *
     * @param charSequence 要校验的字符串
     * @param regExp       正则表达式
     */
    public static boolean checkStringByRegExp(CharSequence charSequence, String regExp) {
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(charSequence);
        return matcher.matches();
    }


    /**
     * 判断一个集合是否为空
     */
    public static boolean isEmptyCollection(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }


    /**
     * 判断一个集合是否不为空
     */
    public static boolean isNotEmptyCollection(Collection<?> collection) {
        return !isEmptyCollection(collection);
    }


    /**
     * 判断一个Map是否为空
     */
    public static boolean isEmptyMap(Map<?, ?> map) {
        return map == null || map.isEmpty();
    }


    /**
     * 判断一个Map是否不为空
     */
    public static boolean isNotEmptyMap(Map<?, ?> map) {
        return !isEmptyMap(map);
    }
}
